package com.expert.miniapp.controller;

import com.expert.miniapp.dao.OtherResource;
import com.expert.miniapp.dto.ResultDTO;
import com.expert.miniapp.service.OtherResourceService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

/**
 * 其他资源控制器
 * 提供其他资源相关的REST API接口
 */
@RestController
@RequestMapping("/api/other-resources")
@CrossOrigin(origins = "*")
public class OtherResourceController {

    @Autowired
    private OtherResourceService otherResourceService;

    /**
     * 根据ID获取其他资源详情
     * @param id 资源ID
     * @return 其他资源详情
     */
    @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")
    public ResultDTO<OtherResource> getResourceDetails(@PathVariable String id) {
        try {
            OtherResource resource = otherResourceService.getResourceById(id);
            if (resource != null) {
                return ResultDTO.success(resource);
            } else {
                return ResultDTO.error("其他资源不存在");
            }
        } catch (Exception e) {
            return ResultDTO.error("查询其他资源失败: " + e.getMessage());
        }
    }

    /**
     * 获取其他资源列表（支持分页、权重推荐、模糊搜索）
     * @param pageNum 页码（可选）
     * @param pageSize 每页数量（可选）
     * @param sortBy 排序方式，weight表示按权重推荐（可选）
     * @param keyword 搜索关键词（可选）
     * @return 其他资源列表
     */
    @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")
    public ResultDTO<PageInfo<OtherResource>> getResourceList(
            @RequestParam(required = false) Integer pageNum,
            @RequestParam(required = false) Integer pageSize,
            @RequestParam(required = false) String sortBy,
            @RequestParam(required = false) String keyword) {
        try {
            PageInfo<OtherResource> pageInfo;

            if (keyword != null && !keyword.trim().isEmpty()) {
                pageInfo = otherResourceService.searchResources(keyword, pageNum, pageSize);
            } else if ("weight".equalsIgnoreCase(sortBy)) {
                pageInfo = otherResourceService.getRecommendedResources(pageNum, pageSize);
            } else {
                pageInfo = otherResourceService.getAllResources(pageNum, pageSize);
            }

            return ResultDTO.success(pageInfo);
        } catch (Exception e) {
            return ResultDTO.error("查询其他资源列表失败: " + e.getMessage());
        }
    }
}